package parser.consulta;

import java.util.LinkedList;

import FilesManagers.CantOpenFileException;
import FilesManagers.FileManager;
import FilesManagers.NoMoreLinesException;
import structuresManagers.AbstractManager;

public abstract class Consulta {
	private String fileResultado;
	private String fileEstructura;
	protected String stringConsulta;
	private AbstractManager estructura;
	
	public String getFileResultado() {
		return fileResultado;
	}
	
	public String[] getResultado() throws CantOpenFileException{
		FileManager fm= new FileManager();
		fm.cargarArchivo(getFileResultado());
		LinkedList<String> lista=new LinkedList<String>();
		
		try {
			for(String aux=fm.obtenerSiguienteLinea();aux!=null;aux=fm.obtenerSiguienteLinea()){
				lista.add(aux);
			}
		} catch (NoMoreLinesException e) {
		}
		//OJO, Al listarlo borra el resultado, esto se puede ejecutar una soola vez
		FileManager.borrar(fileResultado);
		
		if(lista.size()==0){
			//String[] salida=new String[1];
			//salida[0]="No se han encontrado resultados";
			return null;
		}else{
			String[] salida=new String[lista.size()];
			for(int j=0; j<lista.size();j++){
				salida[j]=lista.get(j);
			}
			return salida;
		}
		
		
	}

	public Consulta(String destinoResultado, AbstractManager e,String f){
		//this.fileResultado= destinoResultado;
		this.fileResultado= destinoResultado+String.valueOf(this.hashCode());
		this.estructura=e;
		this.fileEstructura=f;
	}
	
	public abstract String ejecutar() throws CantOpenFileException;

	public AbstractManager getEstructura() {
		return estructura;
	}

	public String getFileEstructura() {
		return fileEstructura;
	}

	public String getStringConsulta() {
		return stringConsulta;
	}

	public void setStringConsulta(String stringConsulta) {
		this.stringConsulta = stringConsulta;
	}
	
}
